//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS Odb service.
///
/// Oracle Database@Amazon Web Services is an offering that enables you to access Oracle Exadata infrastructure managed by Oracle Cloud Infrastructure (OCI) inside Amazon Web Services data centers. You can migrate your Oracle Exadata workloads, establish low-latency connectivity with applications running on Amazon Web Services, and integrate with Amazon Web Services services. For example, you can run application servers in a Virtual Private Cloud (VPC) and access an Oracle Exadata system running in Oracle Database@Amazon Web Services. You can get started with Oracle Database@Amazon Web Services by using the familiar Amazon Web Services Management Console, APIs, or CLI. This interface reference for Oracle Database@Amazon Web Services contains documentation for a programming or command line interface that you can use to manage Oracle Database@Amazon Web Services. Oracle Database@Amazon Web Services is asynchronous, which means that some interfaces might require techniques such as polling or callback functions to determine when a command has been applied. The reference structure is as follows.  Oracle Database@Amazon Web Services API Reference    For the alphabetical list of API actions, see API Actions.   For the alphabetical list of data types, see Data Types.   For a list of common query parameters, see Common Parameters.   For descriptions of the error codes, see Common Errors.
public struct Odb: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the Odb client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            amzTarget: "Odb",
            serviceName: "Odb",
            serviceIdentifier: "odb",
            serviceProtocol: .json(version: "1.0"),
            apiVersion: "2024-08-20",
            endpoint: endpoint,
            errorType: OdbErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }





    // MARK: API Calls

    /// Registers the Amazon Web Services Marketplace token for your Amazon Web Services account to activate your Oracle Database@Amazon Web Services subscription.
    @Sendable
    @inlinable
    public func acceptMarketplaceRegistration(_ input: AcceptMarketplaceRegistrationInput, logger: Logger = AWSClient.loggingDisabled) async throws -> AcceptMarketplaceRegistrationOutput {
        try await self.client.execute(
            operation: "AcceptMarketplaceRegistration", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Registers the Amazon Web Services Marketplace token for your Amazon Web Services account to activate your Oracle Database@Amazon Web Services subscription.
    ///
    /// Parameters:
    ///   - marketplaceRegistrationToken: The registration token that's generated by Amazon Web Services Marketplace and sent to Oracle Database@Amazon Web Services.
    ///   - logger: Logger use during operation
    @inlinable
    public func acceptMarketplaceRegistration(
        marketplaceRegistrationToken: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AcceptMarketplaceRegistrationOutput {
        let input = AcceptMarketplaceRegistrationInput(
            marketplaceRegistrationToken: marketplaceRegistrationToken
        )
        return try await self.acceptMarketplaceRegistration(input, logger: logger)
    }

    /// Creates a new Autonomous VM cluster in the specified Exadata infrastructure.
    @Sendable
    @inlinable
    public func createCloudAutonomousVmCluster(_ input: CreateCloudAutonomousVmClusterInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateCloudAutonomousVmClusterOutput {
        try await self.client.execute(
            operation: "CreateCloudAutonomousVmCluster", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new Autonomous VM cluster in the specified Exadata infrastructure.
    ///
    /// Parameters:
    ///   - autonomousDataStorageSizeInTBs: The data disk group size to be allocated for Autonomous Databases, in terabytes (TB).
    ///   - clientToken: A client-provided token to ensure idempotency of the request.
    ///   - cloudExadataInfrastructureId: The unique identifier of the Exadata infrastructure where the VM cluster will be created.
    ///   - cpuCoreCountPerNode: The number of CPU cores to be enabled per VM cluster node.
    ///   - dbServers: The list of database servers to be used for the Autonomous VM cluster.
    ///   - description: A user-provided description of the Autonomous VM cluster.
    ///   - displayName: The display name for the Autonomous VM cluster. The name does not need to be unique.
    ///   - isMtlsEnabledVmCluster: Specifies whether to enable mutual TLS (mTLS) authentication for the Autonomous VM cluster.
    ///   - licenseModel: The Oracle license model to apply to the Autonomous VM cluster.
    ///   - maintenanceWindow: The scheduling details for the maintenance window. Patching and system updates take place during the maintenance window.
    ///   - memoryPerOracleComputeUnitInGBs: The amount of memory to be allocated per OCPU, in GB.
    ///   - odbNetworkId: The unique identifier of the ODB network to be used for the VM cluster.
    ///   - scanListenerPortNonTls: The SCAN listener port for non-TLS (TCP) protocol.
    ///   - scanListenerPortTls: The SCAN listener port for TLS (TCP) protocol.
    ///   - tags: Free-form tags for this resource. Each tag is a key-value pair with no predefined name, type, or namespace.
    ///   - timeZone: The time zone to use for the Autonomous VM cluster.
    ///   - totalContainerDatabases: The total number of Autonomous CDBs that you can create in the Autonomous VM cluster.
    ///   - logger: Logger use during operation
    @inlinable
    public func createCloudAutonomousVmCluster(
        autonomousDataStorageSizeInTBs: Double,
        clientToken: String? = CreateCloudAutonomousVmClusterInput.idempotencyToken(),
        cloudExadataInfrastructureId: String,
        cpuCoreCountPerNode: Int,
        dbServers: [String]? = nil,
        description: String? = nil,
        displayName: String,
        isMtlsEnabledVmCluster: Bool? = nil,
        licenseModel: LicenseModel? = nil,
        maintenanceWindow: MaintenanceWindow? = nil,
        memoryPerOracleComputeUnitInGBs: Int,
        odbNetworkId: String,
        scanListenerPortNonTls: Int? = nil,
        scanListenerPortTls: Int? = nil,
        tags: [String: String]? = nil,
        timeZone: String? = nil,
        totalContainerDatabases: Int,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateCloudAutonomousVmClusterOutput {
        let input = CreateCloudAutonomousVmClusterInput(
            autonomousDataStorageSizeInTBs: autonomousDataStorageSizeInTBs, 
            clientToken: clientToken, 
            cloudExadataInfrastructureId: cloudExadataInfrastructureId, 
            cpuCoreCountPerNode: cpuCoreCountPerNode, 
            dbServers: dbServers, 
            description: description, 
            displayName: displayName, 
            isMtlsEnabledVmCluster: isMtlsEnabledVmCluster, 
            licenseModel: licenseModel, 
            maintenanceWindow: maintenanceWindow, 
            memoryPerOracleComputeUnitInGBs: memoryPerOracleComputeUnitInGBs, 
            odbNetworkId: odbNetworkId, 
            scanListenerPortNonTls: scanListenerPortNonTls, 
            scanListenerPortTls: scanListenerPortTls, 
            tags: tags, 
            timeZone: timeZone, 
            totalContainerDatabases: totalContainerDatabases
        )
        return try await self.createCloudAutonomousVmCluster(input, logger: logger)
    }

    /// Creates an Exadata infrastructure.
    @Sendable
    @inlinable
    public func createCloudExadataInfrastructure(_ input: CreateCloudExadataInfrastructureInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateCloudExadataInfrastructureOutput {
        try await self.client.execute(
            operation: "CreateCloudExadataInfrastructure", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an Exadata infrastructure.
    ///
    /// Parameters:
    ///   - availabilityZone: The name of the Availability Zone (AZ) where the Exadata infrastructure is located. This operation requires that you specify a value for either availabilityZone or availabilityZoneId. Example: us-east-1a
    ///   - availabilityZoneId: The AZ ID of the AZ where the Exadata infrastructure is located. This operation requires that you specify a value for either availabilityZone or availabilityZoneId. Example: use1-az1
    ///   - clientToken: A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you don't specify a client token, the Amazon Web Services SDK automatically generates a client token and uses it for the request to ensure idempotency. The client token is valid for up to 24 hours after it's first used.
    ///   - computeCount: The number of database servers for the Exadata infrastructure. Valid values for this parameter depend on the shape. To get information about the minimum and maximum values, use the ListDbSystemShapes operation.
    ///   - customerContactsToSendToOCI: The email addresses of contacts to receive notification from Oracle about maintenance updates for the Exadata infrastructure.
    ///   - databaseServerType: The database server model type of the Exadata infrastructure. For the list of valid model names, use the ListDbSystemShapes operation.
    ///   - displayName: A user-friendly name for the Exadata infrastructure.
    ///   - maintenanceWindow: The maintenance window configuration for the Exadata Cloud infrastructure. This allows you to define when maintenance operations such as patching and updates can be performed on the infrastructure.
    ///   - shape: The model name of the Exadata infrastructure. For the list of valid model names, use the ListDbSystemShapes operation.
    ///   - storageCount: The number of storage servers to activate for this Exadata infrastructure. Valid values for this parameter depend on the shape. To get information about the minimum and maximum values, use the ListDbSystemShapes operation.
    ///   - storageServerType: The storage server model type of the Exadata infrastructure. For the list of valid model names, use the ListDbSystemShapes operation.
    ///   - tags: The list of resource tags to apply to the Exadata infrastructure.
    ///   - logger: Logger use during operation
    @inlinable
    public func createCloudExadataInfrastructure(
        availabilityZone: String? = nil,
        availabilityZoneId: String? = nil,
        clientToken: String? = CreateCloudExadataInfrastructureInput.idempotencyToken(),
        computeCount: Int,
        customerContactsToSendToOCI: [CustomerContact]? = nil,
        databaseServerType: String? = nil,
        displayName: String,
        maintenanceWindow: MaintenanceWindow? = nil,
        shape: String,
        storageCount: Int,
        storageServerType: String? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateCloudExadataInfrastructureOutput {
        let input = CreateCloudExadataInfrastructureInput(
            availabilityZone: availabilityZone, 
            availabilityZoneId: availabilityZoneId, 
            clientToken: clientToken, 
            computeCount: computeCount, 
            customerContactsToSendToOCI: customerContactsToSendToOCI, 
            databaseServerType: databaseServerType, 
            displayName: displayName, 
            maintenanceWindow: maintenanceWindow, 
            shape: shape, 
            storageCount: storageCount, 
            storageServerType: storageServerType, 
            tags: tags
        )
        return try await self.createCloudExadataInfrastructure(input, logger: logger)
    }

    /// Creates a VM cluster on the specified Exadata infrastructure.
    @Sendable
    @inlinable
    public func createCloudVmCluster(_ input: CreateCloudVmClusterInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateCloudVmClusterOutput {
        try await self.client.execute(
            operation: "CreateCloudVmCluster", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a VM cluster on the specified Exadata infrastructure.
    ///
    /// Parameters:
    ///   - clientToken: A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you don't specify a client token, the Amazon Web Services SDK automatically generates a client token and uses it for the request to ensure idempotency. The client token is valid for up to 24 hours after it's first used.
    ///   - cloudExadataInfrastructureId: The unique identifier of the Exadata infrastructure for this VM cluster.
    ///   - clusterName: A name for the Grid Infrastructure cluster. The name isn't case sensitive.
    ///   - cpuCoreCount: The number of CPU cores to enable on the VM cluster.
    ///   - dataCollectionOptions: The set of preferences for the various diagnostic collection options for the VM cluster.
    ///   - dataStorageSizeInTBs: The size of the data disk group, in terabytes (TBs), to allocate for the VM cluster.
    ///   - dbNodeStorageSizeInGBs: The amount of local node storage, in gigabytes (GBs), to allocate for the VM cluster.
    ///   - dbServers: The list of database servers for the VM cluster.
    ///   - displayName: A user-friendly name for the VM cluster.
    ///   - giVersion: A valid software version of Oracle Grid Infrastructure (GI). To get the list of valid values, use the ListGiVersions operation and specify the shape of the Exadata infrastructure. Example: 19.0.0.0
    ///   - hostname: The host name for the VM cluster. Constraints:   Can't be "localhost" or "hostname".   Can't contain "-version".   The maximum length of the combined hostname and domain is 63 characters.   The hostname must be unique within the subnet.
    ///   - isLocalBackupEnabled: Specifies whether to enable database backups to local Exadata storage for the VM cluster.
    ///   - isSparseDiskgroupEnabled: Specifies whether to create a sparse disk group for the VM cluster.
    ///   - licenseModel: The Oracle license model to apply to the VM cluster. Default: LICENSE_INCLUDED
    ///   - memorySizeInGBs: The amount of memory, in gigabytes (GBs), to allocate for the VM cluster.
    ///   - odbNetworkId: The unique identifier of the ODB network for the VM cluster.
    ///   - scanListenerPortTcp: The port number for TCP connections to the single client access name (SCAN) listener.  Valid values: 1024–8999 with the following exceptions: 2484, 6100, 6200, 7060, 7070, 7085, and 7879  Default: 1521
    ///   - sshPublicKeys: The public key portion of one or more key pairs used for SSH access to the VM cluster.
    ///   - systemVersion: The version of the operating system of the image for the VM cluster.
    ///   - tags: The list of resource tags to apply to the VM cluster.
    ///   - timeZone: The time zone for the VM cluster. For a list of valid values for time zone, you can check the options in the console. Default: UTC
    ///   - logger: Logger use during operation
    @inlinable
    public func createCloudVmCluster(
        clientToken: String? = CreateCloudVmClusterInput.idempotencyToken(),
        cloudExadataInfrastructureId: String,
        clusterName: String? = nil,
        cpuCoreCount: Int,
        dataCollectionOptions: DataCollectionOptions? = nil,
        dataStorageSizeInTBs: Double? = nil,
        dbNodeStorageSizeInGBs: Int? = nil,
        dbServers: [String]? = nil,
        displayName: String,
        giVersion: String,
        hostname: String,
        isLocalBackupEnabled: Bool? = nil,
        isSparseDiskgroupEnabled: Bool? = nil,
        licenseModel: LicenseModel? = nil,
        memorySizeInGBs: Int? = nil,
        odbNetworkId: String,
        scanListenerPortTcp: Int? = nil,
        sshPublicKeys: [String],
        systemVersion: String? = nil,
        tags: [String: String]? = nil,
        timeZone: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateCloudVmClusterOutput {
        let input = CreateCloudVmClusterInput(
            clientToken: clientToken, 
            cloudExadataInfrastructureId: cloudExadataInfrastructureId, 
            clusterName: clusterName, 
            cpuCoreCount: cpuCoreCount, 
            dataCollectionOptions: dataCollectionOptions, 
            dataStorageSizeInTBs: dataStorageSizeInTBs, 
            dbNodeStorageSizeInGBs: dbNodeStorageSizeInGBs, 
            dbServers: dbServers, 
            displayName: displayName, 
            giVersion: giVersion, 
            hostname: hostname, 
            isLocalBackupEnabled: isLocalBackupEnabled, 
            isSparseDiskgroupEnabled: isSparseDiskgroupEnabled, 
            licenseModel: licenseModel, 
            memorySizeInGBs: memorySizeInGBs, 
            odbNetworkId: odbNetworkId, 
            scanListenerPortTcp: scanListenerPortTcp, 
            sshPublicKeys: sshPublicKeys, 
            systemVersion: systemVersion, 
            tags: tags, 
            timeZone: timeZone
        )
        return try await self.createCloudVmCluster(input, logger: logger)
    }

    /// Creates an ODB network.
    @Sendable
    @inlinable
    public func createOdbNetwork(_ input: CreateOdbNetworkInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateOdbNetworkOutput {
        try await self.client.execute(
            operation: "CreateOdbNetwork", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an ODB network.
    ///
    /// Parameters:
    ///   - availabilityZone: The Amazon Web Services Availability Zone (AZ) where the ODB network is located. This operation requires that you specify a value for either availabilityZone or availabilityZoneId.
    ///   - availabilityZoneId: The AZ ID of the AZ where the ODB network is located. This operation requires that you specify a value for either availabilityZone or availabilityZoneId.
    ///   - backupSubnetCidr: The CIDR range of the backup subnet for the ODB network. Constraints:   Must not overlap with the CIDR range of the client subnet.   Must not overlap with the CIDR ranges of the VPCs that are connected to the ODB network.   Must not use the following CIDR ranges that are reserved by OCI:    100.106.0.0/16 and 100.107.0.0/16     169.254.0.0/16     224.0.0.0 - 239.255.255.255     240.0.0.0 - 255.255.255.255
    ///   - clientSubnetCidr: The CIDR range of the client subnet for the ODB network. Constraints:   Must not overlap with the CIDR range of the backup subnet.   Must not overlap with the CIDR ranges of the VPCs that are connected to the ODB network.   Must not use the following CIDR ranges that are reserved by OCI:    100.106.0.0/16 and 100.107.0.0/16     169.254.0.0/16     224.0.0.0 - 239.255.255.255     240.0.0.0 - 255.255.255.255
    ///   - clientToken: A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you don't specify a client token, the Amazon Web Services SDK automatically generates a client token and uses it for the request to ensure idempotency. The client token is valid for up to 24 hours after it's first used.
    ///   - customDomainName: The domain name to use for the resources in the ODB network.
    ///   - defaultDnsPrefix: The DNS prefix to the default DNS domain name. The default DNS domain name is oraclevcn.com.
    ///   - displayName: A user-friendly name for the ODB network.
    ///   - s3Access: Specifies the configuration for Amazon S3 access from the ODB network.
    ///   - s3PolicyDocument: Specifies the endpoint policy for Amazon S3 access from the ODB network.
    ///   - tags: The list of resource tags to apply to the ODB network.
    ///   - zeroEtlAccess: Specifies the configuration for Zero-ETL access from the ODB network.
    ///   - logger: Logger use during operation
    @inlinable
    public func createOdbNetwork(
        availabilityZone: String? = nil,
        availabilityZoneId: String? = nil,
        backupSubnetCidr: String? = nil,
        clientSubnetCidr: String,
        clientToken: String? = CreateOdbNetworkInput.idempotencyToken(),
        customDomainName: String? = nil,
        defaultDnsPrefix: String? = nil,
        displayName: String,
        s3Access: Access? = nil,
        s3PolicyDocument: String? = nil,
        tags: [String: String]? = nil,
        zeroEtlAccess: Access? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateOdbNetworkOutput {
        let input = CreateOdbNetworkInput(
            availabilityZone: availabilityZone, 
            availabilityZoneId: availabilityZoneId, 
            backupSubnetCidr: backupSubnetCidr, 
            clientSubnetCidr: clientSubnetCidr, 
            clientToken: clientToken, 
            customDomainName: customDomainName, 
            defaultDnsPrefix: defaultDnsPrefix, 
            displayName: displayName, 
            s3Access: s3Access, 
            s3PolicyDocument: s3PolicyDocument, 
            tags: tags, 
            zeroEtlAccess: zeroEtlAccess
        )
        return try await self.createOdbNetwork(input, logger: logger)
    }

    /// Creates a peering connection between an ODB network and a VPC. A peering connection enables private connectivity between the networks for application-tier communication.
    @Sendable
    @inlinable
    public func createOdbPeeringConnection(_ input: CreateOdbPeeringConnectionInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateOdbPeeringConnectionOutput {
        try await self.client.execute(
            operation: "CreateOdbPeeringConnection", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a peering connection between an ODB network and a VPC. A peering connection enables private connectivity between the networks for application-tier communication.
    ///
    /// Parameters:
    ///   - clientToken: The client token for the ODB peering connection request. Constraints:   Must be unique for each request.
    ///   - displayName: The display name for the ODB peering connection.
    ///   - odbNetworkId: The unique identifier of the ODB network that initiates the peering connection.
    ///   - peerNetworkCidrsToBeAdded: A list of CIDR blocks to add to the peering connection. These CIDR blocks define the IP address ranges that can communicate through the peering connection.
    ///   - peerNetworkId: The unique identifier of the peer network. This can be either a VPC ID or another ODB network ID.
    ///   - tags: The tags to assign to the ODB peering connection.
    ///   - logger: Logger use during operation
    @inlinable
    public func createOdbPeeringConnection(
        clientToken: String? = CreateOdbPeeringConnectionInput.idempotencyToken(),
        displayName: String? = nil,
        odbNetworkId: String,
        peerNetworkCidrsToBeAdded: [String]? = nil,
        peerNetworkId: String,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateOdbPeeringConnectionOutput {
        let input = CreateOdbPeeringConnectionInput(
            clientToken: clientToken, 
            displayName: displayName, 
            odbNetworkId: odbNetworkId, 
            peerNetworkCidrsToBeAdded: peerNetworkCidrsToBeAdded, 
            peerNetworkId: peerNetworkId, 
            tags: tags
        )
        return try await self.createOdbPeeringConnection(input, logger: logger)
    }

    /// Deletes an Autonomous VM cluster.
    @Sendable
    @inlinable
    public func deleteCloudAutonomousVmCluster(_ input: DeleteCloudAutonomousVmClusterInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteCloudAutonomousVmClusterOutput {
        try await self.client.execute(
            operation: "DeleteCloudAutonomousVmCluster", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an Autonomous VM cluster.
    ///
    /// Parameters:
    ///   - cloudAutonomousVmClusterId: The unique identifier of the Autonomous VM cluster to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteCloudAutonomousVmCluster(
        cloudAutonomousVmClusterId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteCloudAutonomousVmClusterOutput {
        let input = DeleteCloudAutonomousVmClusterInput(
            cloudAutonomousVmClusterId: cloudAutonomousVmClusterId
        )
        return try await self.deleteCloudAutonomousVmCluster(input, logger: logger)
    }

    /// Deletes the specified Exadata infrastructure. Before you use this operation, make sure to delete all of the VM clusters that are hosted on this Exadata infrastructure.
    @Sendable
    @inlinable
    public func deleteCloudExadataInfrastructure(_ input: DeleteCloudExadataInfrastructureInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteCloudExadataInfrastructureOutput {
        try await self.client.execute(
            operation: "DeleteCloudExadataInfrastructure", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified Exadata infrastructure. Before you use this operation, make sure to delete all of the VM clusters that are hosted on this Exadata infrastructure.
    ///
    /// Parameters:
    ///   - cloudExadataInfrastructureId: The unique identifier of the Exadata infrastructure to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteCloudExadataInfrastructure(
        cloudExadataInfrastructureId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteCloudExadataInfrastructureOutput {
        let input = DeleteCloudExadataInfrastructureInput(
            cloudExadataInfrastructureId: cloudExadataInfrastructureId
        )
        return try await self.deleteCloudExadataInfrastructure(input, logger: logger)
    }

    /// Deletes the specified VM cluster.
    @Sendable
    @inlinable
    public func deleteCloudVmCluster(_ input: DeleteCloudVmClusterInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteCloudVmClusterOutput {
        try await self.client.execute(
            operation: "DeleteCloudVmCluster", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified VM cluster.
    ///
    /// Parameters:
    ///   - cloudVmClusterId: The unique identifier of the VM cluster to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteCloudVmCluster(
        cloudVmClusterId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteCloudVmClusterOutput {
        let input = DeleteCloudVmClusterInput(
            cloudVmClusterId: cloudVmClusterId
        )
        return try await self.deleteCloudVmCluster(input, logger: logger)
    }

    /// Deletes the specified ODB network.
    @Sendable
    @inlinable
    public func deleteOdbNetwork(_ input: DeleteOdbNetworkInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteOdbNetworkOutput {
        try await self.client.execute(
            operation: "DeleteOdbNetwork", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified ODB network.
    ///
    /// Parameters:
    ///   - deleteAssociatedResources: Specifies whether to delete associated OCI networking resources along with the ODB network.
    ///   - odbNetworkId: The unique identifier of the ODB network to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteOdbNetwork(
        deleteAssociatedResources: Bool,
        odbNetworkId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteOdbNetworkOutput {
        let input = DeleteOdbNetworkInput(
            deleteAssociatedResources: deleteAssociatedResources, 
            odbNetworkId: odbNetworkId
        )
        return try await self.deleteOdbNetwork(input, logger: logger)
    }

    /// Deletes an ODB peering connection. When you delete an ODB peering connection, the underlying VPC peering connection is also deleted.
    @Sendable
    @inlinable
    public func deleteOdbPeeringConnection(_ input: DeleteOdbPeeringConnectionInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteOdbPeeringConnectionOutput {
        try await self.client.execute(
            operation: "DeleteOdbPeeringConnection", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an ODB peering connection. When you delete an ODB peering connection, the underlying VPC peering connection is also deleted.
    ///
    /// Parameters:
    ///   - odbPeeringConnectionId: The unique identifier of the ODB peering connection to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteOdbPeeringConnection(
        odbPeeringConnectionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteOdbPeeringConnectionOutput {
        let input = DeleteOdbPeeringConnectionInput(
            odbPeeringConnectionId: odbPeeringConnectionId
        )
        return try await self.deleteOdbPeeringConnection(input, logger: logger)
    }

    /// Gets information about a specific Autonomous VM cluster.
    @Sendable
    @inlinable
    public func getCloudAutonomousVmCluster(_ input: GetCloudAutonomousVmClusterInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetCloudAutonomousVmClusterOutput {
        try await self.client.execute(
            operation: "GetCloudAutonomousVmCluster", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets information about a specific Autonomous VM cluster.
    ///
    /// Parameters:
    ///   - cloudAutonomousVmClusterId: The unique identifier of the Autonomous VM cluster to retrieve information about.
    ///   - logger: Logger use during operation
    @inlinable
    public func getCloudAutonomousVmCluster(
        cloudAutonomousVmClusterId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetCloudAutonomousVmClusterOutput {
        let input = GetCloudAutonomousVmClusterInput(
            cloudAutonomousVmClusterId: cloudAutonomousVmClusterId
        )
        return try await self.getCloudAutonomousVmCluster(input, logger: logger)
    }

    /// Returns information about the specified Exadata infrastructure.
    @Sendable
    @inlinable
    public func getCloudExadataInfrastructure(_ input: GetCloudExadataInfrastructureInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetCloudExadataInfrastructureOutput {
        try await self.client.execute(
            operation: "GetCloudExadataInfrastructure", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the specified Exadata infrastructure.
    ///
    /// Parameters:
    ///   - cloudExadataInfrastructureId: The unique identifier of the Exadata infrastructure.
    ///   - logger: Logger use during operation
    @inlinable
    public func getCloudExadataInfrastructure(
        cloudExadataInfrastructureId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetCloudExadataInfrastructureOutput {
        let input = GetCloudExadataInfrastructureInput(
            cloudExadataInfrastructureId: cloudExadataInfrastructureId
        )
        return try await self.getCloudExadataInfrastructure(input, logger: logger)
    }

    /// Retrieves information about unallocated resources in a specified Cloud Exadata Infrastructure.
    @Sendable
    @inlinable
    public func getCloudExadataInfrastructureUnallocatedResources(_ input: GetCloudExadataInfrastructureUnallocatedResourcesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetCloudExadataInfrastructureUnallocatedResourcesOutput {
        try await self.client.execute(
            operation: "GetCloudExadataInfrastructureUnallocatedResources", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves information about unallocated resources in a specified Cloud Exadata Infrastructure.
    ///
    /// Parameters:
    ///   - cloudExadataInfrastructureId: The unique identifier of the Cloud Exadata infrastructure for which to retrieve unallocated resources.
    ///   - dbServers: The database servers to include in the unallocated resources query.
    ///   - logger: Logger use during operation
    @inlinable
    public func getCloudExadataInfrastructureUnallocatedResources(
        cloudExadataInfrastructureId: String,
        dbServers: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetCloudExadataInfrastructureUnallocatedResourcesOutput {
        let input = GetCloudExadataInfrastructureUnallocatedResourcesInput(
            cloudExadataInfrastructureId: cloudExadataInfrastructureId, 
            dbServers: dbServers
        )
        return try await self.getCloudExadataInfrastructureUnallocatedResources(input, logger: logger)
    }

    /// Returns information about the specified VM cluster.
    @Sendable
    @inlinable
    public func getCloudVmCluster(_ input: GetCloudVmClusterInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetCloudVmClusterOutput {
        try await self.client.execute(
            operation: "GetCloudVmCluster", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the specified VM cluster.
    ///
    /// Parameters:
    ///   - cloudVmClusterId: The unique identifier of the VM cluster.
    ///   - logger: Logger use during operation
    @inlinable
    public func getCloudVmCluster(
        cloudVmClusterId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetCloudVmClusterOutput {
        let input = GetCloudVmClusterInput(
            cloudVmClusterId: cloudVmClusterId
        )
        return try await self.getCloudVmCluster(input, logger: logger)
    }

    /// Returns information about the specified DB node.
    @Sendable
    @inlinable
    public func getDbNode(_ input: GetDbNodeInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDbNodeOutput {
        try await self.client.execute(
            operation: "GetDbNode", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the specified DB node.
    ///
    /// Parameters:
    ///   - cloudVmClusterId: The unique identifier of the VM cluster that contains the DB node.
    ///   - dbNodeId: The unique identifier of the DB node to retrieve information about.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDbNode(
        cloudVmClusterId: String,
        dbNodeId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDbNodeOutput {
        let input = GetDbNodeInput(
            cloudVmClusterId: cloudVmClusterId, 
            dbNodeId: dbNodeId
        )
        return try await self.getDbNode(input, logger: logger)
    }

    /// Returns information about the specified database server.
    @Sendable
    @inlinable
    public func getDbServer(_ input: GetDbServerInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDbServerOutput {
        try await self.client.execute(
            operation: "GetDbServer", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the specified database server.
    ///
    /// Parameters:
    ///   - cloudExadataInfrastructureId: The unique identifier of the Oracle Exadata infrastructure that contains the database server.
    ///   - dbServerId: The unique identifier of the database server to retrieve information about.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDbServer(
        cloudExadataInfrastructureId: String,
        dbServerId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDbServerOutput {
        let input = GetDbServerInput(
            cloudExadataInfrastructureId: cloudExadataInfrastructureId, 
            dbServerId: dbServerId
        )
        return try await self.getDbServer(input, logger: logger)
    }

    /// Returns the tenancy activation link and onboarding status for your Amazon Web Services account.
    @Sendable
    @inlinable
    public func getOciOnboardingStatus(_ input: GetOciOnboardingStatusInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetOciOnboardingStatusOutput {
        try await self.client.execute(
            operation: "GetOciOnboardingStatus", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the tenancy activation link and onboarding status for your Amazon Web Services account.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func getOciOnboardingStatus(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetOciOnboardingStatusOutput {
        let input = GetOciOnboardingStatusInput(
        )
        return try await self.getOciOnboardingStatus(input, logger: logger)
    }

    /// Returns information about the specified ODB network.
    @Sendable
    @inlinable
    public func getOdbNetwork(_ input: GetOdbNetworkInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetOdbNetworkOutput {
        try await self.client.execute(
            operation: "GetOdbNetwork", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the specified ODB network.
    ///
    /// Parameters:
    ///   - odbNetworkId: The unique identifier of the ODB network.
    ///   - logger: Logger use during operation
    @inlinable
    public func getOdbNetwork(
        odbNetworkId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetOdbNetworkOutput {
        let input = GetOdbNetworkInput(
            odbNetworkId: odbNetworkId
        )
        return try await self.getOdbNetwork(input, logger: logger)
    }

    /// Retrieves information about an ODB peering connection.
    @Sendable
    @inlinable
    public func getOdbPeeringConnection(_ input: GetOdbPeeringConnectionInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetOdbPeeringConnectionOutput {
        try await self.client.execute(
            operation: "GetOdbPeeringConnection", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves information about an ODB peering connection.
    ///
    /// Parameters:
    ///   - odbPeeringConnectionId: The unique identifier of the ODB peering connection to retrieve information about.
    ///   - logger: Logger use during operation
    @inlinable
    public func getOdbPeeringConnection(
        odbPeeringConnectionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetOdbPeeringConnectionOutput {
        let input = GetOdbPeeringConnectionInput(
            odbPeeringConnectionId: odbPeeringConnectionId
        )
        return try await self.getOdbPeeringConnection(input, logger: logger)
    }

    /// Initializes the ODB service for the first time in an account.
    @Sendable
    @inlinable
    public func initializeService(_ input: InitializeServiceInput, logger: Logger = AWSClient.loggingDisabled) async throws -> InitializeServiceOutput {
        try await self.client.execute(
            operation: "InitializeService", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Initializes the ODB service for the first time in an account.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func initializeService(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> InitializeServiceOutput {
        let input = InitializeServiceInput(
        )
        return try await self.initializeService(input, logger: logger)
    }

    /// Lists all Autonomous VMs in an Autonomous VM cluster.
    @Sendable
    @inlinable
    public func listAutonomousVirtualMachines(_ input: ListAutonomousVirtualMachinesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAutonomousVirtualMachinesOutput {
        try await self.client.execute(
            operation: "ListAutonomousVirtualMachines", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all Autonomous VMs in an Autonomous VM cluster.
    ///
    /// Parameters:
    ///   - cloudAutonomousVmClusterId: The unique identifier of the Autonomous VM cluster whose virtual machines you're listing.
    ///   - maxResults: The maximum number of items to return per page.
    ///   - nextToken: The pagination token to continue listing from.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAutonomousVirtualMachines(
        cloudAutonomousVmClusterId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAutonomousVirtualMachinesOutput {
        let input = ListAutonomousVirtualMachinesInput(
            cloudAutonomousVmClusterId: cloudAutonomousVmClusterId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAutonomousVirtualMachines(input, logger: logger)
    }

    /// Lists all Autonomous VM clusters in a specified Cloud Exadata infrastructure.
    @Sendable
    @inlinable
    public func listCloudAutonomousVmClusters(_ input: ListCloudAutonomousVmClustersInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCloudAutonomousVmClustersOutput {
        try await self.client.execute(
            operation: "ListCloudAutonomousVmClusters", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all Autonomous VM clusters in a specified Cloud Exadata infrastructure.
    ///
    /// Parameters:
    ///   - cloudExadataInfrastructureId: The unique identifier of the Cloud Exadata Infrastructure that hosts the Autonomous VM clusters to be listed.
    ///   - maxResults: The maximum number of items to return per page.
    ///   - nextToken: The pagination token to continue listing from.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCloudAutonomousVmClusters(
        cloudExadataInfrastructureId: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCloudAutonomousVmClustersOutput {
        let input = ListCloudAutonomousVmClustersInput(
            cloudExadataInfrastructureId: cloudExadataInfrastructureId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listCloudAutonomousVmClusters(input, logger: logger)
    }

    /// Returns information about the Exadata infrastructures owned by your Amazon Web Services account.
    @Sendable
    @inlinable
    public func listCloudExadataInfrastructures(_ input: ListCloudExadataInfrastructuresInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCloudExadataInfrastructuresOutput {
        try await self.client.execute(
            operation: "ListCloudExadataInfrastructures", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the Exadata infrastructures owned by your Amazon Web Services account.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - nextToken: The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCloudExadataInfrastructures(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCloudExadataInfrastructuresOutput {
        let input = ListCloudExadataInfrastructuresInput(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listCloudExadataInfrastructures(input, logger: logger)
    }

    /// Returns information about the VM clusters owned by your Amazon Web Services account or only the ones on the specified Exadata infrastructure.
    @Sendable
    @inlinable
    public func listCloudVmClusters(_ input: ListCloudVmClustersInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCloudVmClustersOutput {
        try await self.client.execute(
            operation: "ListCloudVmClusters", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the VM clusters owned by your Amazon Web Services account or only the ones on the specified Exadata infrastructure.
    ///
    /// Parameters:
    ///   - cloudExadataInfrastructureId: The unique identifier of the Oracle Exadata infrastructure.
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - nextToken: The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCloudVmClusters(
        cloudExadataInfrastructureId: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCloudVmClustersOutput {
        let input = ListCloudVmClustersInput(
            cloudExadataInfrastructureId: cloudExadataInfrastructureId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listCloudVmClusters(input, logger: logger)
    }

    /// Returns information about the DB nodes for the specified VM cluster.
    @Sendable
    @inlinable
    public func listDbNodes(_ input: ListDbNodesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDbNodesOutput {
        try await self.client.execute(
            operation: "ListDbNodes", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the DB nodes for the specified VM cluster.
    ///
    /// Parameters:
    ///   - cloudVmClusterId: The unique identifier of the VM cluster.
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - nextToken: The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDbNodes(
        cloudVmClusterId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDbNodesOutput {
        let input = ListDbNodesInput(
            cloudVmClusterId: cloudVmClusterId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDbNodes(input, logger: logger)
    }

    /// Returns information about the database servers that belong to the specified Exadata infrastructure.
    @Sendable
    @inlinable
    public func listDbServers(_ input: ListDbServersInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDbServersOutput {
        try await self.client.execute(
            operation: "ListDbServers", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the database servers that belong to the specified Exadata infrastructure.
    ///
    /// Parameters:
    ///   - cloudExadataInfrastructureId: The unique identifier of the Oracle Exadata infrastructure.
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - nextToken: The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDbServers(
        cloudExadataInfrastructureId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDbServersOutput {
        let input = ListDbServersInput(
            cloudExadataInfrastructureId: cloudExadataInfrastructureId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDbServers(input, logger: logger)
    }

    /// Returns information about the shapes that are available for an Exadata infrastructure.
    @Sendable
    @inlinable
    public func listDbSystemShapes(_ input: ListDbSystemShapesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDbSystemShapesOutput {
        try await self.client.execute(
            operation: "ListDbSystemShapes", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the shapes that are available for an Exadata infrastructure.
    ///
    /// Parameters:
    ///   - availabilityZone: The logical name of the AZ, for example, us-east-1a. This name varies depending on the account.
    ///   - availabilityZoneId: The physical ID of the AZ, for example, use1-az4. This ID persists across accounts.
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - nextToken: The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDbSystemShapes(
        availabilityZone: String? = nil,
        availabilityZoneId: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDbSystemShapesOutput {
        let input = ListDbSystemShapesInput(
            availabilityZone: availabilityZone, 
            availabilityZoneId: availabilityZoneId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDbSystemShapes(input, logger: logger)
    }

    /// Returns information about Oracle Grid Infrastructure (GI) software versions that are available for a VM cluster for the specified shape.
    @Sendable
    @inlinable
    public func listGiVersions(_ input: ListGiVersionsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListGiVersionsOutput {
        try await self.client.execute(
            operation: "ListGiVersions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about Oracle Grid Infrastructure (GI) software versions that are available for a VM cluster for the specified shape.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - nextToken: The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.
    ///   - shape: The shape to return GI versions for. For a list of valid shapes, use the ListDbSystemShapes operation..
    ///   - logger: Logger use during operation
    @inlinable
    public func listGiVersions(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        shape: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListGiVersionsOutput {
        let input = ListGiVersionsInput(
            maxResults: maxResults, 
            nextToken: nextToken, 
            shape: shape
        )
        return try await self.listGiVersions(input, logger: logger)
    }

    /// Returns information about the ODB networks owned by your Amazon Web Services account.
    @Sendable
    @inlinable
    public func listOdbNetworks(_ input: ListOdbNetworksInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListOdbNetworksOutput {
        try await self.client.execute(
            operation: "ListOdbNetworks", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the ODB networks owned by your Amazon Web Services account.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - nextToken: The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.
    ///   - logger: Logger use during operation
    @inlinable
    public func listOdbNetworks(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListOdbNetworksOutput {
        let input = ListOdbNetworksInput(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listOdbNetworks(input, logger: logger)
    }

    /// Lists all ODB peering connections or those associated with a specific ODB network.
    @Sendable
    @inlinable
    public func listOdbPeeringConnections(_ input: ListOdbPeeringConnectionsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListOdbPeeringConnectionsOutput {
        try await self.client.execute(
            operation: "ListOdbPeeringConnections", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all ODB peering connections or those associated with a specific ODB network.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of ODB peering connections to return in the response. Default: 20  Constraints:   Must be between 1 and 100.
    ///   - nextToken: The pagination token for the next page of ODB peering connections.
    ///   - odbNetworkId: The identifier of the ODB network to list peering connections for. If not specified, lists all ODB peering connections in the account.
    ///   - logger: Logger use during operation
    @inlinable
    public func listOdbPeeringConnections(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        odbNetworkId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListOdbPeeringConnectionsOutput {
        let input = ListOdbPeeringConnectionsInput(
            maxResults: maxResults, 
            nextToken: nextToken, 
            odbNetworkId: odbNetworkId
        )
        return try await self.listOdbPeeringConnections(input, logger: logger)
    }

    /// Returns information about the system versions that are available for a VM cluster for the specified giVersion and shape.
    @Sendable
    @inlinable
    public func listSystemVersions(_ input: ListSystemVersionsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListSystemVersionsOutput {
        try await self.client.execute(
            operation: "ListSystemVersions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the system versions that are available for a VM cluster for the specified giVersion and shape.
    ///
    /// Parameters:
    ///   - giVersion: The software version of the Exadata Grid Infrastructure (GI).
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - nextToken: The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.
    ///   - shape: The Exadata hardware system model.
    ///   - logger: Logger use during operation
    @inlinable
    public func listSystemVersions(
        giVersion: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        shape: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListSystemVersionsOutput {
        let input = ListSystemVersionsInput(
            giVersion: giVersion, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            shape: shape
        )
        return try await self.listSystemVersions(input, logger: logger)
    }

    /// Returns information about the tags applied to this resource.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the tags applied to this resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource to list tags for.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Reboots the specified DB node in a VM cluster.
    @Sendable
    @inlinable
    public func rebootDbNode(_ input: RebootDbNodeInput, logger: Logger = AWSClient.loggingDisabled) async throws -> RebootDbNodeOutput {
        try await self.client.execute(
            operation: "RebootDbNode", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Reboots the specified DB node in a VM cluster.
    ///
    /// Parameters:
    ///   - cloudVmClusterId: The unique identifier of the VM cluster that contains the DB node to reboot.
    ///   - dbNodeId: The unique identifier of the DB node to reboot.
    ///   - logger: Logger use during operation
    @inlinable
    public func rebootDbNode(
        cloudVmClusterId: String,
        dbNodeId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RebootDbNodeOutput {
        let input = RebootDbNodeInput(
            cloudVmClusterId: cloudVmClusterId, 
            dbNodeId: dbNodeId
        )
        return try await self.rebootDbNode(input, logger: logger)
    }

    /// Starts the specified DB node in a VM cluster.
    @Sendable
    @inlinable
    public func startDbNode(_ input: StartDbNodeInput, logger: Logger = AWSClient.loggingDisabled) async throws -> StartDbNodeOutput {
        try await self.client.execute(
            operation: "StartDbNode", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts the specified DB node in a VM cluster.
    ///
    /// Parameters:
    ///   - cloudVmClusterId: The unique identifier of the VM cluster that contains the DB node to start.
    ///   - dbNodeId: The unique identifier of the DB node to start.
    ///   - logger: Logger use during operation
    @inlinable
    public func startDbNode(
        cloudVmClusterId: String,
        dbNodeId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartDbNodeOutput {
        let input = StartDbNodeInput(
            cloudVmClusterId: cloudVmClusterId, 
            dbNodeId: dbNodeId
        )
        return try await self.startDbNode(input, logger: logger)
    }

    /// Stops the specified DB node in a VM cluster.
    @Sendable
    @inlinable
    public func stopDbNode(_ input: StopDbNodeInput, logger: Logger = AWSClient.loggingDisabled) async throws -> StopDbNodeOutput {
        try await self.client.execute(
            operation: "StopDbNode", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops the specified DB node in a VM cluster.
    ///
    /// Parameters:
    ///   - cloudVmClusterId: The unique identifier of the VM cluster that contains the DB node to stop.
    ///   - dbNodeId: The unique identifier of the DB node to stop.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopDbNode(
        cloudVmClusterId: String,
        dbNodeId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopDbNodeOutput {
        let input = StopDbNodeInput(
            cloudVmClusterId: cloudVmClusterId, 
            dbNodeId: dbNodeId
        )
        return try await self.stopDbNode(input, logger: logger)
    }

    /// Applies tags to the specified resource.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Applies tags to the specified resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource to apply tags to.
    ///   - tags: The list of tags to apply to the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [String: String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Removes tags from the specified resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes tags from the specified resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource to remove tags from.
    ///   - tagKeys: The names (keys) of the tags to remove from the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Updates the properties of an Exadata infrastructure resource.
    @Sendable
    @inlinable
    public func updateCloudExadataInfrastructure(_ input: UpdateCloudExadataInfrastructureInput, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateCloudExadataInfrastructureOutput {
        try await self.client.execute(
            operation: "UpdateCloudExadataInfrastructure", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the properties of an Exadata infrastructure resource.
    ///
    /// Parameters:
    ///   - cloudExadataInfrastructureId: The unique identifier of the Exadata infrastructure to update.
    ///   - maintenanceWindow: 
    ///   - logger: Logger use during operation
    @inlinable
    public func updateCloudExadataInfrastructure(
        cloudExadataInfrastructureId: String,
        maintenanceWindow: MaintenanceWindow? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateCloudExadataInfrastructureOutput {
        let input = UpdateCloudExadataInfrastructureInput(
            cloudExadataInfrastructureId: cloudExadataInfrastructureId, 
            maintenanceWindow: maintenanceWindow
        )
        return try await self.updateCloudExadataInfrastructure(input, logger: logger)
    }

    /// Updates properties of a specified ODB network.
    @Sendable
    @inlinable
    public func updateOdbNetwork(_ input: UpdateOdbNetworkInput, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateOdbNetworkOutput {
        try await self.client.execute(
            operation: "UpdateOdbNetwork", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates properties of a specified ODB network.
    ///
    /// Parameters:
    ///   - displayName: The new user-friendly name of the ODB network.
    ///   - odbNetworkId: The unique identifier of the ODB network to update.
    ///   - peeredCidrsToBeAdded: The list of CIDR ranges from the peered VPC that allow access to the ODB network.
    ///   - peeredCidrsToBeRemoved: The list of CIDR ranges from the peered VPC to remove from the ODB network.
    ///   - s3Access: Specifies the updated configuration for Amazon S3 access from the ODB network.
    ///   - s3PolicyDocument: Specifies the updated endpoint policy for Amazon S3 access from the ODB network.
    ///   - zeroEtlAccess: Specifies the updated configuration for Zero-ETL access from the ODB network.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateOdbNetwork(
        displayName: String? = nil,
        odbNetworkId: String,
        peeredCidrsToBeAdded: [String]? = nil,
        peeredCidrsToBeRemoved: [String]? = nil,
        s3Access: Access? = nil,
        s3PolicyDocument: String? = nil,
        zeroEtlAccess: Access? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateOdbNetworkOutput {
        let input = UpdateOdbNetworkInput(
            displayName: displayName, 
            odbNetworkId: odbNetworkId, 
            peeredCidrsToBeAdded: peeredCidrsToBeAdded, 
            peeredCidrsToBeRemoved: peeredCidrsToBeRemoved, 
            s3Access: s3Access, 
            s3PolicyDocument: s3PolicyDocument, 
            zeroEtlAccess: zeroEtlAccess
        )
        return try await self.updateOdbNetwork(input, logger: logger)
    }

    /// Modifies the settings of an Oracle Database@Amazon Web Services peering connection. You can update the display name and add or remove CIDR blocks from the peering connection.
    @Sendable
    @inlinable
    public func updateOdbPeeringConnection(_ input: UpdateOdbPeeringConnectionInput, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateOdbPeeringConnectionOutput {
        try await self.client.execute(
            operation: "UpdateOdbPeeringConnection", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Modifies the settings of an Oracle Database@Amazon Web Services peering connection. You can update the display name and add or remove CIDR blocks from the peering connection.
    ///
    /// Parameters:
    ///   - displayName: A new display name for the peering connection.
    ///   - odbPeeringConnectionId: The identifier of the Oracle Database@Amazon Web Services peering connection to update.
    ///   - peerNetworkCidrsToBeAdded: A list of CIDR blocks to add to the peering connection. These CIDR blocks define the IP address ranges that can communicate through the peering connection. The CIDR blocks must not overlap with existing CIDR blocks in the Oracle Database@Amazon Web Services network.
    ///   - peerNetworkCidrsToBeRemoved: A list of CIDR blocks to remove from the peering connection. The CIDR blocks must currently exist in the peering connection.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateOdbPeeringConnection(
        displayName: String? = nil,
        odbPeeringConnectionId: String,
        peerNetworkCidrsToBeAdded: [String]? = nil,
        peerNetworkCidrsToBeRemoved: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateOdbPeeringConnectionOutput {
        let input = UpdateOdbPeeringConnectionInput(
            displayName: displayName, 
            odbPeeringConnectionId: odbPeeringConnectionId, 
            peerNetworkCidrsToBeAdded: peerNetworkCidrsToBeAdded, 
            peerNetworkCidrsToBeRemoved: peerNetworkCidrsToBeRemoved
        )
        return try await self.updateOdbPeeringConnection(input, logger: logger)
    }
}

extension Odb {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: Odb, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension Odb {
    /// Return PaginatorSequence for operation ``listAutonomousVirtualMachines(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAutonomousVirtualMachinesPaginator(
        _ input: ListAutonomousVirtualMachinesInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAutonomousVirtualMachinesInput, ListAutonomousVirtualMachinesOutput> {
        return .init(
            input: input,
            command: self.listAutonomousVirtualMachines,
            inputKey: \ListAutonomousVirtualMachinesInput.nextToken,
            outputKey: \ListAutonomousVirtualMachinesOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAutonomousVirtualMachines(_:logger:)``.
    ///
    /// - Parameters:
    ///   - cloudAutonomousVmClusterId: The unique identifier of the Autonomous VM cluster whose virtual machines you're listing.
    ///   - maxResults: The maximum number of items to return per page.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAutonomousVirtualMachinesPaginator(
        cloudAutonomousVmClusterId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAutonomousVirtualMachinesInput, ListAutonomousVirtualMachinesOutput> {
        let input = ListAutonomousVirtualMachinesInput(
            cloudAutonomousVmClusterId: cloudAutonomousVmClusterId, 
            maxResults: maxResults
        )
        return self.listAutonomousVirtualMachinesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCloudAutonomousVmClusters(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCloudAutonomousVmClustersPaginator(
        _ input: ListCloudAutonomousVmClustersInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCloudAutonomousVmClustersInput, ListCloudAutonomousVmClustersOutput> {
        return .init(
            input: input,
            command: self.listCloudAutonomousVmClusters,
            inputKey: \ListCloudAutonomousVmClustersInput.nextToken,
            outputKey: \ListCloudAutonomousVmClustersOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCloudAutonomousVmClusters(_:logger:)``.
    ///
    /// - Parameters:
    ///   - cloudExadataInfrastructureId: The unique identifier of the Cloud Exadata Infrastructure that hosts the Autonomous VM clusters to be listed.
    ///   - maxResults: The maximum number of items to return per page.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCloudAutonomousVmClustersPaginator(
        cloudExadataInfrastructureId: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCloudAutonomousVmClustersInput, ListCloudAutonomousVmClustersOutput> {
        let input = ListCloudAutonomousVmClustersInput(
            cloudExadataInfrastructureId: cloudExadataInfrastructureId, 
            maxResults: maxResults
        )
        return self.listCloudAutonomousVmClustersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCloudExadataInfrastructures(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCloudExadataInfrastructuresPaginator(
        _ input: ListCloudExadataInfrastructuresInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCloudExadataInfrastructuresInput, ListCloudExadataInfrastructuresOutput> {
        return .init(
            input: input,
            command: self.listCloudExadataInfrastructures,
            inputKey: \ListCloudExadataInfrastructuresInput.nextToken,
            outputKey: \ListCloudExadataInfrastructuresOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCloudExadataInfrastructures(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - logger: Logger used for logging
    @inlinable
    public func listCloudExadataInfrastructuresPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCloudExadataInfrastructuresInput, ListCloudExadataInfrastructuresOutput> {
        let input = ListCloudExadataInfrastructuresInput(
            maxResults: maxResults
        )
        return self.listCloudExadataInfrastructuresPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCloudVmClusters(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCloudVmClustersPaginator(
        _ input: ListCloudVmClustersInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCloudVmClustersInput, ListCloudVmClustersOutput> {
        return .init(
            input: input,
            command: self.listCloudVmClusters,
            inputKey: \ListCloudVmClustersInput.nextToken,
            outputKey: \ListCloudVmClustersOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCloudVmClusters(_:logger:)``.
    ///
    /// - Parameters:
    ///   - cloudExadataInfrastructureId: The unique identifier of the Oracle Exadata infrastructure.
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - logger: Logger used for logging
    @inlinable
    public func listCloudVmClustersPaginator(
        cloudExadataInfrastructureId: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCloudVmClustersInput, ListCloudVmClustersOutput> {
        let input = ListCloudVmClustersInput(
            cloudExadataInfrastructureId: cloudExadataInfrastructureId, 
            maxResults: maxResults
        )
        return self.listCloudVmClustersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDbNodes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDbNodesPaginator(
        _ input: ListDbNodesInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDbNodesInput, ListDbNodesOutput> {
        return .init(
            input: input,
            command: self.listDbNodes,
            inputKey: \ListDbNodesInput.nextToken,
            outputKey: \ListDbNodesOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDbNodes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - cloudVmClusterId: The unique identifier of the VM cluster.
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - logger: Logger used for logging
    @inlinable
    public func listDbNodesPaginator(
        cloudVmClusterId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDbNodesInput, ListDbNodesOutput> {
        let input = ListDbNodesInput(
            cloudVmClusterId: cloudVmClusterId, 
            maxResults: maxResults
        )
        return self.listDbNodesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDbServers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDbServersPaginator(
        _ input: ListDbServersInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDbServersInput, ListDbServersOutput> {
        return .init(
            input: input,
            command: self.listDbServers,
            inputKey: \ListDbServersInput.nextToken,
            outputKey: \ListDbServersOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDbServers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - cloudExadataInfrastructureId: The unique identifier of the Oracle Exadata infrastructure.
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - logger: Logger used for logging
    @inlinable
    public func listDbServersPaginator(
        cloudExadataInfrastructureId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDbServersInput, ListDbServersOutput> {
        let input = ListDbServersInput(
            cloudExadataInfrastructureId: cloudExadataInfrastructureId, 
            maxResults: maxResults
        )
        return self.listDbServersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDbSystemShapes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDbSystemShapesPaginator(
        _ input: ListDbSystemShapesInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDbSystemShapesInput, ListDbSystemShapesOutput> {
        return .init(
            input: input,
            command: self.listDbSystemShapes,
            inputKey: \ListDbSystemShapesInput.nextToken,
            outputKey: \ListDbSystemShapesOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDbSystemShapes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - availabilityZone: The logical name of the AZ, for example, us-east-1a. This name varies depending on the account.
    ///   - availabilityZoneId: The physical ID of the AZ, for example, use1-az4. This ID persists across accounts.
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - logger: Logger used for logging
    @inlinable
    public func listDbSystemShapesPaginator(
        availabilityZone: String? = nil,
        availabilityZoneId: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDbSystemShapesInput, ListDbSystemShapesOutput> {
        let input = ListDbSystemShapesInput(
            availabilityZone: availabilityZone, 
            availabilityZoneId: availabilityZoneId, 
            maxResults: maxResults
        )
        return self.listDbSystemShapesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listGiVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listGiVersionsPaginator(
        _ input: ListGiVersionsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListGiVersionsInput, ListGiVersionsOutput> {
        return .init(
            input: input,
            command: self.listGiVersions,
            inputKey: \ListGiVersionsInput.nextToken,
            outputKey: \ListGiVersionsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listGiVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - shape: The shape to return GI versions for. For a list of valid shapes, use the ListDbSystemShapes operation..
    ///   - logger: Logger used for logging
    @inlinable
    public func listGiVersionsPaginator(
        maxResults: Int? = nil,
        shape: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListGiVersionsInput, ListGiVersionsOutput> {
        let input = ListGiVersionsInput(
            maxResults: maxResults, 
            shape: shape
        )
        return self.listGiVersionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listOdbNetworks(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listOdbNetworksPaginator(
        _ input: ListOdbNetworksInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListOdbNetworksInput, ListOdbNetworksOutput> {
        return .init(
            input: input,
            command: self.listOdbNetworks,
            inputKey: \ListOdbNetworksInput.nextToken,
            outputKey: \ListOdbNetworksOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listOdbNetworks(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - logger: Logger used for logging
    @inlinable
    public func listOdbNetworksPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListOdbNetworksInput, ListOdbNetworksOutput> {
        let input = ListOdbNetworksInput(
            maxResults: maxResults
        )
        return self.listOdbNetworksPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listOdbPeeringConnections(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listOdbPeeringConnectionsPaginator(
        _ input: ListOdbPeeringConnectionsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListOdbPeeringConnectionsInput, ListOdbPeeringConnectionsOutput> {
        return .init(
            input: input,
            command: self.listOdbPeeringConnections,
            inputKey: \ListOdbPeeringConnectionsInput.nextToken,
            outputKey: \ListOdbPeeringConnectionsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listOdbPeeringConnections(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of ODB peering connections to return in the response. Default: 20  Constraints:   Must be between 1 and 100.
    ///   - odbNetworkId: The identifier of the ODB network to list peering connections for. If not specified, lists all ODB peering connections in the account.
    ///   - logger: Logger used for logging
    @inlinable
    public func listOdbPeeringConnectionsPaginator(
        maxResults: Int? = nil,
        odbNetworkId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListOdbPeeringConnectionsInput, ListOdbPeeringConnectionsOutput> {
        let input = ListOdbPeeringConnectionsInput(
            maxResults: maxResults, 
            odbNetworkId: odbNetworkId
        )
        return self.listOdbPeeringConnectionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listSystemVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listSystemVersionsPaginator(
        _ input: ListSystemVersionsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListSystemVersionsInput, ListSystemVersionsOutput> {
        return .init(
            input: input,
            command: self.listSystemVersions,
            inputKey: \ListSystemVersionsInput.nextToken,
            outputKey: \ListSystemVersionsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listSystemVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - giVersion: The software version of the Exadata Grid Infrastructure (GI).
    ///   - maxResults: The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. Default: 10
    ///   - shape: The Exadata hardware system model.
    ///   - logger: Logger used for logging
    @inlinable
    public func listSystemVersionsPaginator(
        giVersion: String,
        maxResults: Int? = nil,
        shape: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListSystemVersionsInput, ListSystemVersionsOutput> {
        let input = ListSystemVersionsInput(
            giVersion: giVersion, 
            maxResults: maxResults, 
            shape: shape
        )
        return self.listSystemVersionsPaginator(input, logger: logger)
    }
}

extension Odb.ListAutonomousVirtualMachinesInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Odb.ListAutonomousVirtualMachinesInput {
        return .init(
            cloudAutonomousVmClusterId: self.cloudAutonomousVmClusterId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Odb.ListCloudAutonomousVmClustersInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Odb.ListCloudAutonomousVmClustersInput {
        return .init(
            cloudExadataInfrastructureId: self.cloudExadataInfrastructureId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Odb.ListCloudExadataInfrastructuresInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Odb.ListCloudExadataInfrastructuresInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Odb.ListCloudVmClustersInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Odb.ListCloudVmClustersInput {
        return .init(
            cloudExadataInfrastructureId: self.cloudExadataInfrastructureId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Odb.ListDbNodesInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Odb.ListDbNodesInput {
        return .init(
            cloudVmClusterId: self.cloudVmClusterId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Odb.ListDbServersInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Odb.ListDbServersInput {
        return .init(
            cloudExadataInfrastructureId: self.cloudExadataInfrastructureId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Odb.ListDbSystemShapesInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Odb.ListDbSystemShapesInput {
        return .init(
            availabilityZone: self.availabilityZone,
            availabilityZoneId: self.availabilityZoneId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Odb.ListGiVersionsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Odb.ListGiVersionsInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            shape: self.shape
        )
    }
}

extension Odb.ListOdbNetworksInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Odb.ListOdbNetworksInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Odb.ListOdbPeeringConnectionsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Odb.ListOdbPeeringConnectionsInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            odbNetworkId: self.odbNetworkId
        )
    }
}

extension Odb.ListSystemVersionsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Odb.ListSystemVersionsInput {
        return .init(
            giVersion: self.giVersion,
            maxResults: self.maxResults,
            nextToken: token,
            shape: self.shape
        )
    }
}
